package main

import "fmt"

func f(from string) {
	for i := 0; i < 3; i++ {
		fmt.Println(from, ":", i)
	}
}
func main() {
	//假设我们有一个函数叫做 f(s)。一般会这样同步(synchronously)调用

	f("direct")
	//使用 go f(s) 在一个 Go 协程中调用这个函数。 这个新的 Go 协程将会并发(concurrently)执行这个函数。

	go f("goroutine")
	//你也可以为匿名函数启动一个 Go 协程。

	go func(msg string) {
		fmt.Println(msg)
	}("going")
	//现在这两个 Go 协程在独立的 Go 协程中异步(asynchronously)运行，所以 程序直接运行到这一行。这里的 Scanln 代码需要我们 在程序退出前按下任意键结束。

	fmt.Scanln()
	fmt.Println("done")
}
